Mysql基础
PHP+Mysql运用的部分
框架项目

数据库：用来存放数据

数据库类型：
    关系型数据库
        表与表之间存在关系的这种就是关系型数据库

    非关系型数据库
        表与表之间不存在关系的这种就是非关系型数据库

数据库种类：
    MySQL、Oracle、Microsoft SQL Server 和IBM DB2都是关系型数据库系统(database system)

数据库的组成部分：
    数据库  
        编码
            数据表 
                编码
                表的引擎 myisam innodb 内存表
                表与表之间的关系：1对1 1对多 多对多
                    数据字段 
                        编码
                        类型：int float string text enum
                        属性：default 非负数 自增
                        索引：保证数据的唯一性，提高我们数据的搜索速度
                        外键：用来关联多表之间的数据关系
                            插入数据

SQL结构化查询语句：增删查改

如何在PHP当中去查询mysql的数据库


核心：如何去建立出一个数据库
建立数据库的步骤：
    1、挑实体，找属性
    2、将实体变成表，将属性变成表里面的字段(数据类型)
    3、实现表与表之间的关系
        1对1 主键对主键
        1对多 将1里面的主键放到多里面做外键
        多对多 将两张表里面的主键放到第三张表里面做外键

什么是实体、属性
    实体：就是用来确定我们的数据表，如何确定一个实体
    满足3个条件：
        1、必须是真实存在的
        2、有多个属性(多个字段)
        3、有多条数据

项目中比如说有会员，订单，商品，优惠券
我们应该从哪里去分析出数据库的基本内容，从客户的需求里面来分析出数据库

需求：建立一个公司的通讯录，要标记出员工所在部门，职位，姓名，手机号码，邮箱，城市等相关信息

数据库的名字：company utf8 utf8_general_ci
数据库建表的时候，为了标准化会给表添加一个表前缀的概念：为了防止表重名
表前缀：pre_表名
一个表只能有一个自增的选项

部门     职位     


员工

部门：员工 1对多 1个部门下有多个员工
职位：员工 1对多 1个职位下有多个员工
部门：职位 1对多 1个部门下有多个职位


挑实体找属性：
    部门 pre_department innodb表引擎
        id  int 非负属性 自增选项 主键 不是空的
        name VARCHAR(150)  部门名称  索引：唯一索引 保证数据的唯一性

    职位 pre_job innodb表引擎
        id int 非负属性 自增选项 主键 不是空的
        name  VARCHAR(200) 职位名称  索引：唯一索引 保证数据的唯一性
        depid  int 非负属性 普通字段 需要设置索引和外键

    员工 pre_person innodb表引擎
        id int 非负属性 自增选项 主键
        name   VARCHAR(100)     员工姓名
        sex     enum('0','1','2') 0保密 1男 2女 默认值：0   性别
        mobile VARCHAR(80)  手机号 索引：唯一索引 保证数据的唯一性
        email   VARCHAR(200)  邮箱 索引：唯一索引 保证数据的唯一性
        address   VARCHAR(255)  详细地址
        avatar      varchar(255) 头像
        createtime  int 非负数属性 入职时间
        depid(外键)  int 非负属性 用来表示所属的部门
        jobid(外键)  int 非负属性 用来表示所属的职位

外键约束：
    部门表：
        id=1 name=开发部

    职位表：
        id=1 name=web前端 depid=1
        id=2 name=web后端 depid=1
        id=3 name=web测试 depid=1

    员工表：
        

phpmyadmin  小皮里面自带出来的 - 网页端数据库管理工具
navicat 数据库软件  客户端 用来连接数据库 推荐

SQL语句：增删查改
PHP操作数据库

insert插入语句 如何判断执行成功 就去判断是否有影响行数
mysqli_insert_id

update更新语句  没有增加的变化，所有mysqli_insert_id捕捉不到变化的
mysql_affected_rows 获取影响行数

DELETE 删除语句 没有增加的变化，所有mysqli_insert_id捕捉不到变化的
mysql_affected_rows 获取影响行数

SELECT 查询



公司通讯录 -> 纯php源生源代码 -> 考验php基础语法和函数 sql语句数据库操作
    index.php
        -> meta.php 公共样式和脚本文件
        -> header.php 头部文件
        -> menu.php 菜单文件

Cookie 是存放在客户端浏览器上面的，用户是可以直接查看的。并且还可以修改

session 是存放在服务器端上的缓存，用户在客户端是看不到的，并且也修改不了
session 不能直接用  
session_start()要先开启
session是基于cookie的运作方式，cookie被禁用了 session还是可以正常使用的 因为php会自动将cookie转换到浏览器地址上作为参数传递

例子：会员20W 管理员20个


什么时候用cookie 20W


什么时候用session 管理员

不管在怎么安全。你都不可以，把隐私的信息放到缓存里面 尽管这个缓存是放在服务器的也不行

链表查询
    LEFT JOIN 左链表
    RIGHT JOIN 右链表
    INNER JOIN 内链表

1:1 主键：主键  ID:ID 

表A记录如下：                             表B记录如下:
id　　　　　aNum                          id　　　　　bNum
1　　　　　a20050111                      1　　　　　2006032401
2　　　　　a20050112                      2　　　　　2006032402
3　　　　　a20050113                      3　　　　　2006032403
4　　　　　a20050114                      4　　　　　2006032404
5　　　　　a20050115                      8　　　　　2006032408

左链表 A 主表 B 副表
先把A表里面的数据全部查询出来
在去根据A表的数据，找出B表的关联部分
SELECT 查询字段 FROM 表1 LEFT JOIN 表2 ON 表1 = 表2 关系条件 WHERE 条件
SELECT * FROM A LEFT JOIN B ON A.aid = B.bid

防止字段被覆盖
SELECT a.id AS aid, b.id AS bid FROM A AS a LEFT JOIN B AS b ON a.id = b.id
WHERE a.id = 3


右链表
先将B表的数据全部查询出来
然后在根据B表的数据去找出A表中关联的部分
SELECT * FROM A RIGHT JOIN B ON A.id = B.id
    
内链表 都是主表 要把两个表全都满足条件的查询出来
SELECT * FROM A INNER JOIN B ON A.id = B.id

分页：
    纯过程式的
    封装的